﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者：王明亮
 * 创建时间：2023/9/11 11:17:13
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace StructType._03.组合模式.透明式
{
    /// <summary>
    /// Transparent 透明式实现
    /// </summary>
    public class Transparent
    {
        /// <summary>
        /// 该抽象类就是文件夹抽象接口的定义，该类型就相当于是抽象构件Component类型
        /// </summary>
        public abstract class Folder
        {
            //增加文件夹或文件
            public abstract void Add(Folder folder);

            //删除文件夹或者文件
            public abstract void Remove(Folder folder);

            //打开文件或者文件夹--该操作相当于Component类型的Operation方法
            public abstract void Open();
        }

        /// <summary>
        /// 该Word文档类就是叶子构件的定义，该类型就相当于是Leaf类型，不能在包含子对象
        /// </summary>
        public sealed class Word : Folder
        {
            //增加文件夹或文件
            public override void Add(Folder folder)
            {
                throw new Exception("Word文档不具有该功能");
            }

            //删除文件夹或者文件
            public override void Remove(Folder folder)
            {
                throw new Exception("Word文档不具有该功能");
            }

            //打开文件--该操作相当于Component类型的Operation方法
            public override void Open()
            {
                Console.WriteLine("打开Word文档，开始进行编辑");
            }
        }

        /// <summary>
        /// SonFolder类型就是树枝构件，由于我们使用的是“透明式”，所以Add,Remove都是从Folder类型继承下来的
        /// </summary>
        public class SonFolder : Folder
        {
            //增加文件夹或文件
            public override void Add(Folder folder)
            {
                Console.WriteLine("文件或者文件夹已经增加成功");
            }

            //删除文件夹或者文件
            public override void Remove(Folder folder)
            {
                Console.WriteLine("文件或者文件夹已经删除成功");
            }

            //打开文件夹--该操作相当于Component类型的Operation方法
            public override void Open()
            {
                Console.WriteLine("已经打开当前文件夹");
            }
        }
    }
}
